Showing posts with label c programming. Show all posts
Showing posts with label c programming. Show all posts

Tuesday, September 24, 2013

STRUCTURE AND UNIONS

STRUCTURE  AND  UNIONS


Structure is the collection of variables of different types under a single name for better handling. For example: You want to store the information about person about his/her name, citizenship number and salary. You can create these information separately but, better approach will be collection of these information under single name because all these information are related to person.

Structure Definition in C

Keyword struct is used for creating a structure.
Syntax of structure
struct structure_name
{
    data_type member1;
    data_type member2;
    .
    .
    data_type memeber;
};
We can create the structure for a person as mentioned above as:
struct person
{
    char name[50];
    int cit_no;
    float salary;
};
This declaration above creates the derived data type struct person.
Structure variable declaration
When a structure is defined, it creates a user-defined type but, no storage is allocated. For the above structure of person, variable can be declared as:
struct person
{
    char name[50];
    int cit_no;
    float salary;
};

Inside main function:

struct person p1, p2, p[20];
Another way of creating sturcture variable is:
struct person
{
    char name[50];
    int cit_no;
    float salary;
}p1 ,p2 ,p[20];
In both cases, 2 variables p1, p2 and array p having 20 elements of type struct person are created.

Accessing members of a structure

There are two types of operators used for accessing members of a structure.

Member operator(.)
Structure pointer operator(->)

Any member of a structure can be accessed as: structure_variable_name.member_name
Suppose, we want to access salary for variable p2. Then, it can be accessed as:
p2.salary

Example of structure


Write a C program to add two distances entered by user. Measurement of distance should be in inch and feet.(Note: 12 inches = 1 foot)

#include <stdio.h>
struct Distance{
    int feet;
    float inch;
}d1,d2,sum;
int main(){
    printf("1st distance\n");
    printf("Enter feet: ");
    scanf("%d",&d1.feet);  /* input of feet for structure variable d1 */
    printf("Enter inch: ");
    scanf("%f",&d1.inch);  /* input of inch for structure variable d1 */
    printf("2nd distance\n");
    printf("Enter feet: ");
    scanf("%d",&d2.feet);  /* input of feet for structure variable d2 */
    printf("Enter inch: ");
    scanf("%f",&d2.inch);  /* input of inch for structure variable d2 */
    sum.feet=d1.feet+d2.feet;
    sum.inch=d1.inch+d2.inch;
    if (sum.inch>12){  //If inch is greater than 12, changing it to feet.
        ++sum.feet;
        sum.inch=sum.inch-12;
    }
    printf("Sum of distances=%d\'-%.1f\"",sum.feet,sum.inch);
/* printing sum of distance d1 and d2 */
    return 0;
}

Output
1st distance
Enter feet: 12
Enter inch: 7.9
2nd distance
Enter feet: 2
Enter inch: 9.8
Sum of distances= 15'-5.7"

Keyword typedef while using structure

Programmer generally use typedef while using structure in C language. For example:
typedef struct complex{
  int imag;
  float real;
}comp;

Inside main:
comp c1,c2;
Here, typedef keyword is used in creating a type comp(which is of type as struct complex). Then, two structure variables c1 and c2 are created by this comp type.
Structures within structures
Structures can be nested within other structures in C programming.
struct complex
{
 int imag_value;
 float real_value;
};
struct number{
   struct complex c1;
   int real;
}n1,n2;
Suppose you want to access imag_value for n2 structure variable then, structure member n1.c1.imag_value is used.

Pointers can be accessed along with structures. A pointer variable of structure can be created as below:
struct name {
    member1;
    member2;
    .
    .
};
-------- Inside function -------
struct name *ptr;
Here, the pointer variable of type struct name is created.
Structure's member through pointer can be used in two ways:
Referencing pointer to another address to access memory
Using dynamic memory allocation
Consider an example to access structure's member through pointer.
#include <stdio.h>
struct name{
   int a;
   float b;
};
int main(){
    struct name *ptr,p;
    ptr=&p;            /* Referencing pointer to memory address of p */
    printf("Enter integer: ");
    scanf("%d",&(*ptr).a);
    printf("Enter number: ");
    scanf("%f",&(*ptr).b);
    printf("Displaying: ");
    printf("%d%f",(*ptr).a,(*ptr).b);
    return 0;
}
In this example, the pointer variable of type struct name is referenced to the address of p. Then, only the structure member through pointer can can accessed.

Structure pointer member can also be accessed using -> operator.
(*ptr).a is same as ptr->a
(*ptr).b is same as ptr->b

Accessing structure member through pointer using dynamic memory allocation
To access structure member using pointers, memory can be allocated dynamically using malloc() function defined under "stdlib.h" header file.
Syntax to use malloc()
ptr=(cast-type*)malloc(byte-size)
Example to use structure's member through pointer using malloc() function.
#include <stdio.h>
#include<stdlib.h>
struct name {
   int a;
   float b;
   char c[30];
};
int main(){
   struct name *ptr;
   int i,n;
   printf("Enter n: ");
   scanf("%d",&n);
   ptr=(struct name*)malloc(n*sizeof(struct name));
/* Above statement allocates the memory for n structures with pointer ptr pointing to base address */
   for(i=0;i<n;++i){
       printf("Enter string, integer and floating number  respectively:\n");
       scanf("%s%d%f",&(ptr+i)->c,&(ptr+i)->a,&(ptr+i)->b);
   }
   printf("Displaying Infromation:\n");
   for(i=0;i<n;++i)
       printf("%s\t%d\t%.2f\n",(ptr+i)->c,(ptr+i)->a,(ptr+i)->b);
   return 0;
}

Output
Enter n: 2
Enter string, integer and floating number  respectively:
Programming
2
3.2
Enter string, integer and floating number  respectively:
Structure
6
2.3
Displaying Information
Programming      2      3.20
Structure      6      2.30

POINTERS

POINTER


Pointers are the powerful feature of C and (C++) programming, which differs it from other popular programming languages like: java and Visual Basic.
Pointers are used in C program to access the memory and manipulate the address.
Reference operator(&)
If var is a variable then, &var is the address in memory.

/* Example to demonstrate use of reference operator in C programming. */
#include <stdio.h>
int main(){
  int var=5;
  printf("Value: %d\n",var);
  printf("Address: %d",&var);  //Notice, the ampersand(&) before var.
  return 0;
}
Output
Value: 5
Address: 2686778


Note: You may obtain different value of address while using this code.
In above source code, value 5 is stored in the memory location 2686778. var is just the name given to that location.
You, have already used reference operator in C program while using scanf() function.
scanf("%d",&var);
Reference operator(*) and Pointer variables
Pointers variables are used for taking addresses as values, i.e., a variable that holds address value is called a pointer variable or simply a pointer.

Declaration of Pointer

Dereference operator(*) are used to identify an operator as a pointer.
data_type * pointer_variable_name;
int *p;
Above statement defines, p as pointer variable of type int.

Example To Demonstrate Working of Pointers

/* Source code to demonstrate, handling of pointers in C program */
#include <stdio.h>
int main(){
   int *pc,c;
   c=22;
   printf("Address of c:%d\n",&c);
   printf("Value of c:%d\n\n",c);
   pc=&c;
   printf("Address of pointer pc:%d\n",pc);
   printf("Content of pointer pc:%d\n\n",*pc);
   c=11;
   printf("Address of pointer pc:%d\n",pc);
   printf("Content of pointer pc:%d\n\n",*pc);
   *pc=2;
   printf("Address of c:%d\n",&c);
   printf("Value of c:%d\n\n",c);
   return 0;
}

Output
Address of c: 2686784
Value of c: 22

Address of pointer pc: 2686784
Content of pointer pc: 22

Address of pointer pc: 2686784
Content of pointer pc: 11

Address of c: 2686784
Value of c: 2

Working of pointers in C programming

Code int *pc, p; creates a pointer pc and a variable c.

Pointer pc points to some address and that address has garbage value. Similarly, variable c also has garbage value at this point.
Code c=22; makes the value of c equal to 22, i.e.,22 is stored in the memory location of variable c.
Code pc=&c; makes pointer, point to address of c. Note that, &c is the address of variable c (because c is normal variable) and pc is the address of pc (because pc is the pointer variable). Since the address of pc and address of c is same, *pc (value of pointer pc) will be equal to the value of c.
Code c=11; makes the value of c, 11. Since, pointer pc is pointing to address of c. Value of *pc will also be 11.
Code *pc=2; change the address pointed by pointer pc to change to 2. Since, address of pointer pc is same as address of c, value of c also changes to 2.

Commonly done mistakes in pointers

Suppose, the programmar want pointer pc to point to the address of c. Then,
int c, *pc;
pc=c;  /* pc is address whereas, c is not an address. */
*pc=&c; /* &c is address whereas, *pc is not an address. */
In both cases, pointer pc is not pointing to the address of c.

pointers  and Arrays

Arrays are closely related to pointers in C programming. Arrays and pointers are synonymous in terms of how they use to access memory. But, the important difference between them is that, a pointer variable can take different addresses as value whereas, in case of array it is fixed. This can be demonstrated by an example:

#include <stdio.h>
int main(){
   char c[4];
   int i;
   for(i=0;i<4;++i){
      printf("Address of c[%d]=%x\n",i,&c[i]);
   }
   return 0;
}
Address of c[0]=28ff44
Address of c[1]=28ff45
Address of c[2]=28ff46
Address of c[3]=28ff47
Notice, that there is equal difference (difference of 1 byte) between any two consecutive elements of array.
Note: You may get different address of an array.

Relation between Arrays and Pointers

Consider and array:

int arr[4];

Relation between arrays and pointers

In arrays of C programming, name of the array always points to the first element of an array. Here, address of first element of an array is &arr[0]. Also, arr represents the address of the pointer where it is pointing. Hence, &arr[0] is equivalent to arr.
Also, value inside the address &arr[0] and address arr are equal. Value in address &arr[0] is arr[0] and value in address arr is *arr. Hence, arr[0] is equivalent to *arr.
Similarly,
&a[1] is equivalent to (a+1)  AND, a[1] is equivalent to *(a+1).
&a[2] is equivalent to (a+2)  AND, a[2] is equivalent to *(a+2).
&a[3] is equivalent to (a+1)  AND, a[3] is equivalent to *(a+3).
.
.
&a[i] is equivalent to (a+i)  AND, a[i] is equivalent to *(a+i).
In C, you can declare an array and can use pointer to alter the data of an array.
//Program to find the sum of six numbers with arrays and pointers.
#include <stdio.h>
int main(){
  int i,class[6],sum=0;
  printf("Enter 6 numbers:\n");
  for(i=0;i<6;++i){
      scanf("%d",(class+i)); // (class+i) is equivalent to &class[i]
      sum += *(class+i); // *(class+i) is equivalent to class[i]
  }
  printf("Sum=%d",sum);
  return 0;
}
Output
Enter 6 numbers:
2
3
4
5
3
4
Sum=21


C Programming Pointers and Functions - Call by Reference


When, argument is passed using pointer, address of the memory location is passed instead of value.

Example of Pointer And Functions

Program to swap two number using call by reference.

 /* C Program to swap two numbers using pointers and function. */
#include <stdio.h>
void swap(int *a,int *b);
int main(){
  int num1=5,num2=10;
  swap(&num1,&num2);  /* address of num1 and num2 is passed to swap function */
  printf("Number1 = %d\n",num1);
  printf("Number2 = %d",num2);
  return 0;
}
void swap(int *a,int *b){ /* pointer a and b points to address of num1 and num2 respectively */
  int temp;
  temp=*a;
  *a=*b;
  *b=temp;
}
Output
Number1 = 10
Number2 = 5

Explanation
The address of memory location num1 and num2 are passed to function and the pointers *a and *b accept those values. So, the pointer a and b points to address of num1 and num2 respectively. When, the value of pointer are changed, the value in memory location also changed correspondingly. Hence, change made to *a and *b was reflected in num1 and num2 in main function.
This technique is known as call by reference in C programming


C Programming Dynamic Memory Allocation

The exact size of array is unknown until the compile time,i.e., time when a compiler compiles code written in a programming language into a executable form. The size of array you have declared initially can be sometimes insufficient and sometimes more than required. Dynamic memory allocation allows a program to obtain more memory space, while running or to release space when no space is required.

Although, C language inherently does not has any technique to allocated memory dynamically, there are 4 library functions under "stdlib.h" for dynamic memory allocation.

Function Use Of Function

malloc() Allocates requested size of bytes and returns a pointer first byte of allocated space
calloc() Allocates space for an array elements, initializes to zero and then returns a pointer to memory
free() dellocate the previously allocated space
realloc() Change the size of previously allocated space.

malloc()

The name malloc stands for "memory allocation". The function malloc() reserves a block of memory of specified size and return a pointer of type void which can be casted into pointer of any form.


Syntax of malloc()

ptr=(cast-type*)malloc(byte-size)
Here, ptr is pointer of cast-type. The malloc() function returns a pointer to an area of memory with size of byte size. If the space is insufficient, allocation fails and returns NULL pointer.

ptr=(int*)malloc(100*sizeof(int));
This statement will allocate either 200 or 400 according to size of int 2 or 4 bytes respectively and the pointer points to the address of first byte of memory.

calloc()

The name calloc stands for "contiguous allocation". The only difference between malloc() and calloc() is that, malloc() allocates single block of memory whereas calloc() allocates multiple blocks of memory each of same size and sets all bytes to zero.

Syntax of calloc()
ptr=(cast-type*)calloc(n,element-size);
This statement will allocate contiguous space in memory for an array of n elements. For example:
ptr=(float*)calloc(25,sizeof(float));
This statement allocates contiguous space in memory for an array of 25 elements each of size of float, i.e, 4 bytes.
free()
Dynamically allocated memory with either calloc() or malloc() does not get return on its own. The programmer must use free() explicitly to release space.
syntax of free()
free(ptr);
This statement cause the space in memory pointer by ptr to be deallocated.

Examples of calloc() and malloc()

Write a C program to find sum of n elements entered by user. To perform this program, allocate memory dynamically using malloc() function.

#include <stdio.h>
#include <stdlib.h>
int main(){
    int n,i,*ptr,sum=0;
    printf("Enter number of elements: ");
    scanf("%d",&n);
    ptr=(int*)malloc(n*sizeof(int));  //memory allocated using malloc
    if(ptr==NULL)                    
    {
        printf("Error! memory not allocated.");
        exit(0);
    }
    printf("Enter elements of array: ");
    for(i=0;i<n;++i)
    {
        scanf("%d",ptr+i);
        sum+=*(ptr+i);
    }
    printf("Sum=%d",sum);
    free(ptr);
    return 0;
}

Write a C program to find sum of n elements entered by user. To perform this program, allocate memory dynamically using calloc() function.

#include <stdio.h>
#include <stdlib.h>
int main(){
    int n,i,*ptr,sum=0;
    printf("Enter number of elements: ");
    scanf("%d",&n);
    ptr=(int*)calloc(n,sizeof(int));
    if(ptr==NULL)
    {
        printf("Error! memory not allocated.");
        exit(0);
    }
    printf("Enter elements of array: ");
    for(i=0;i<n;++i)
    {
        scanf("%d",ptr+i);
        sum+=*(ptr+i);
    }
    printf("Sum=%d",sum);
    free(ptr);
    return 0;
}

realloc()

If the previously allocated memory is insufficient or more than sufficient. Then, you can change memory size previously allocated using realloc().
Syntax of realloc()
ptr=realloc(ptr,newsize);
Here, ptr is reallocated with size of newsize.
#include <stdio.h>
#include <stdlib.h>
int main(){
    int *ptr,i,n1,n2;
    printf("Enter size of array: ");
    scanf("%d",&n1);
    ptr=(int*)malloc(n1*sizeof(int));
    printf("Address of previously allocated memory: ");
    for(i=0;i<n1;++i)
         printf("%u\t",ptr+i);
    printf("\nEnter new size of array: ");
    scanf("%d",&n2);
    ptr=realloc(ptr,n2);
    for(i=0;i<n2;++i)
         printf("%u\t",ptr+i);
    return 0;
}

FUNCTIONS

FUNCTIONS

Function in programming is a segment that groups a number of program statements to perform specific task.

A C program has at least one function main( ). Without main() function, there is technically no C program.

Types of C functions

There are two types of functions in C .

Library function
User defined function

Library function

Library functions are the in-built function in C programming system. For example:
main()
- The execution of every C program starts from this main() function.
printf()
- prinf() is used for displaying output in C.
scanf()
- scanf() is used for taking input in C.

User defined function

C provides programmer to define their own function according to their requirement known as user defined functions.
Suppose, a programmer wants to find factorial of a number and check whether it is prime or not in same program. Then, user   can create two separate user-defined functions in that program one for finding factorial and other for checking whether it is prime or not.

working of user-defined function  in C Programming
#include <stdio.h>
void function_name(){
................
................
}
int main(){
...........
...........
function_name();
...........
...........
}
As mentioned earlier, every C program begins from main() and program starts executing the codes inside main() function. When the control of program reaches to function_name() inside main() function. The control of program jumps to void function_name() and executes the codes inside it. When, all the codes inside that user-defined function are executed, control of the program jumps to the statement just after function_name() from where it is called .

Remember, the function name is an identifier and should be unique.

Advantages of user defined functions

User defined functions helps to decompose the large program into small segments which makes programmer easy to understand, maintain and debug.
If repeated code occurs in a program. Function can be used to include those codes and execute when needed by calling that function.
Programmer working on large project can divide the workload by making different functions.


Example of user-defined function .

Write a C program to add two integers. Make a function add to add integers and display sum in main() function.

/*Program to demonstrate the working of user defined function*/
#include <stdio.h>
int add(int a, int b);           //function prototype(declaration)
int main(){
     int num1,num2,sum;
     printf("Enters two number to add\n");
     scanf("%d %d",&num1,&num2);
     sum=add(num1,num2);         //function call
     printf("sum=%d",sum);
     return 0;
}
int add(int a,int b)            //function declaration
{            
/* Start of function definition. */
     int add;
     add=a+b;
     return add;                  //return statement of function
/* End of function definition. */  
}                                

Function prototype(declaration):

Every function in C programming should be declared before they are used. These type of declaration are also called function prototype. Function prototype gives compiler information about function name, type of arguments to be passed and return type.

Syntax of function prototype
return_type function_name(type(1) argument(1),....,type(n) argument(n));

In the above example,int add(int a, int b); is a function prototype which provides following information to the compiler:
name of the function is add()
return type of the function is int.
two arguments of type int are passed to function.

Function prototype are not needed if user-definition function is written before main() function.

Function call

Control of the program cannot be transferred to user-defined function unless it is called invoked.

Syntax of function call
function_name(argument(1),....argument(n));

In the above example, function call is made using statement add(num1,num2); from main(). This make the control of program jump from that statement to function definition and executes the codes inside that function.

Function definition

Function definition contains programming codes to perform specific task.

Syntax of function definition
return_type function_name(type(1) argument(1),..,type(n) argument(n))
{
                //body of function
}

Function definition has two major components .

1. Function declaration

Function declarator is the first line of function definition. When a function is invoked from calling function, control of the program is transferred to function declaration  or called function.

Syntax of function declaration

return_type function_name(type(1) argument(1),....,type(n) argument))


2. Function body

Function declarator is followed by body of function which is composed of statements.

Passing arguments to functions

In programming, argument/parameter is a piece of data(constant or  variable) passed from a program to the function.
In above example two variable, num1 and num2 are passed to function during function call and these arguments are accepted by arguments a and b in function definition.


Passing argument/parameter through function in C

Arguments that are passed in function call and arguments that are accepted in function definition should have same data type .
 For example:
If argument num1 was of int type and num2 was of float type then, argument variable a should be of type int and b should be of type float,i.e., type of argument during function call and function definition should be same.

A function can be called with or without an argument.

Return Statement

Return statement is used for returning a value from function definition to calling function.
Syntax of return statement
return (expression);
          OR
     return;    
For example:
return;
return a;
return (a+b);

In above example, value of variable add in add() function is returned and that value is stored in variable sum in main() function. The data type of expression in return statement should also match the return type of function.


Types of User-defined Functions in C Programming

 user-defined functions can be categorised as

Function with no arguments and no return value
Function with no arguments and return value
Function with arguments but no return value
Function with arguments and return value.

Let's take an example to find whether a number is prime or not using above 4 categories of user defined functions.
Function with no arguments and no return value.

/*C program to check whether a number entered by user is prime or not using function with no arguments and no return value*/
#include <stdio.h>
void prime();
int main(){
    prime();      //No argument is passed to prime().
    return 0;
}
void prime(){
/* There is no return value to calling function main(). Hence, return type of prime() is void */
    int num,i,flag=0;
    printf("Enter positive integer enter to check:\n");
    scanf("%d",&num);
    for(i=2;i<=num/2;++i){
        if(num%i==0){
             flag=1;
         }
    }
    if (flag==1)
        printf("%d is not prime",num);
    else
       printf("%d is prime",num);
    }
Function prime() is used for asking user a input, check for whether it is prime of not and display it accordingly. No argument is passed and returned form prime() function.

Function with no arguments but return value

/*C program to check whether a number entered by user is prime or not using function with no arguments but having return value */
#include <stdio.h>
int input();
int main(){
    int num,i,flag;
    num=input();     /* No argument is passed to input() */
    for(i=2,flag=i;i<=num/2;++i,flag=i){
    if(num%i==0){
        printf("%d is not prime",num);
        ++flag;
        break;
    }
    }
    if(flag==i)
        printf("%d is prime",num);
    return 0;
}
int input(){   /* Integer value is returned from input() to calling function */
    int n;
    printf("Enter positive enter to check:\n");
    scanf("%d",&n);
    return n;
}
There is no argument passed to input() function But, the value of n is returned from input() to main() function.

Function with arguments and no return value

/*Program to check whether a number entered by user is prime or not using function with arguments and no return value */
#include <stdio.h>
void check_display(int n);
int main(){
    int num;
    printf("Enter positive enter to check:\n");
    scanf("%d",&num);
    check_display(num);  /* Argument num is passed to function. */
    return 0;
}
void check_display(int n){    
/* There is no return value to calling function. Hence, return type of function is void. */
    int i,flag;
    for(i=2,flag=i;i<=n/2;++i,flag=i){
    if(n%i==0){
        printf("%d is not prime",n);
        ++flag;
        break;
    }
    }
    if(flag==i)
        printf("%d is prime",n);
}
Here, check_display() function is used for check whether it is prime or not and display it accordingly. Here, argument is passed to user-defined function but, value is not returned from it to calling function.

Function with argument and a return value

/* Program to check whether a number entered by user is prime or not using function with argument and return value */
#include <stdio.h>
int check(int n);
int main(){
    int num,num_check=0;
    printf("Enter positive enter to check:\n");
    scanf("%d",&num);
    num_check=check(num); /* Argument num is passed to check() function. */
    if(num_check==1)
       printf("%d in not prime",num);
    else
       printf("%d is prime",num);
    return 0;
}
int check(int n){  
/* Integer value is returned from function check() */
    int i;
    for(i=2;i<=n/2;++i){
    if(n%i==0)
        return 1;
}
   return 0;
}

Here, check() function is used for checking whether a number is prime or not. In this program, input from user is passed to function check() and integer value is returned from it. If input the number is prime, 0 is returned and if number is not prime, 1 is returned.

A function that calls itself is known as recursive function and the process of calling function itself is known as recursion in C programming.

Example of recursion in C programming

Write a C program to find sum of first n natural numbers using recursion.

Note: Positive integers are known as natural number i.e. 1, 2, 3....n

#include <stdio.h>
int sum(int n);
int main(){
    int num,add;
    printf("Enter a positive integer:\n");
    scanf("%d",&num);
    add=sum(num);
    printf("sum=%d",add);
}
int sum(int n){
    if(n==0)
       return n;
    else
       return n+sum(n-1);    /*self call  to function sum() */
}
Output
Enter a positive integer:
5
15
In, this simple C program, sum() function is invoked from the same function. If n is not equal to 0 then, the function calls itself passing argument 1 less than the previous argument it was called with. Suppose, n is 5 initially. Then, during next function calls, 4 is passed to function and the value of argument decreases by 1 in each recursive call. When, n becomes equal to 0, the value of n is returned which is the sum numbers from 5 to 1.
For better visualization of recursion in this example:
sum(5)
=5+sum(4)
=5+4+sum(3)
=5+4+3+sum(2)
=5+4+3+2+sum(1)
=5+4+3+2+1+sum(0)
=5+4+3+2+1+0
=5+4+3+2+1
=5+4+3+3
=5+4+6
=5+10
=15
Every recursive function must be provided with a way to end the recursion. In this example when, n is equal to 0, there is no recursive call and recursion ends.

Advantages and Disadvantages of Recursion

Recursion is more elegant and requires few variables which make program clean. Recursion can be used to replace complex nesting code by dividing the problem into same problem of its sub-type.
In other hand, it is hard to think the logic of a recursive function. It is also difficult to debug the code containing recursion.

Every variable and function in C programming has two properties.

 Type and storage class.

 Type refers to the data type of variable whether it is character or integer or floating-point value etc.

There are 4 types of storage class:
automatic
external
static
register

Automatic storage class

Keyword for automatic variable

auto

Variables declared inside the function body are automatic by default. These variable are also known as local variables as they are local to the function and doesn't have meaning outside that function
Since, variable inside a function is automatic by default, keyword auto are rarely used.

External storage class

External variable can be accessed by any function. They are also known as global variables. Variables declared outside every function are external variables.
In case of large program, containing more than one file, if the global variable is declared in file 1 and that variable is used in file 2 then, compiler will show error. To solve this problem, keyword extern is used in file 2 to indicate that, the variable specified is global variable and declared in another file.
Example to demonstrate working of external variable

#include  
void Check();
int a=5;  
/* a is global variable because it is outside every function */
int main(){
    a+=4;
    Check();
    return 0;
}

void Check(){
   ++a;
/*  ----- Variable a is not declared in this function but, works in any function as they are global variable -------  */
   printf("a=%d\n",a);
}
Output
a=10

Register Storage Class

Keyword to declare register variable

register

Example of register variable

register int a;

Register variables are similar to automatic variable and exists inside that particular function only.
If the compiler encounters register variable, it tries to store variable in microprocessor's register rather than memory. Value stored in register are much faster than that of memory.
In case of larger program, variables that are used in loops and function parameters are declared register variables.
Since, there are limited number of register in processor and if it couldn't store the variable in register, it will automatically store it in memory.

Static Storage Class
The value of static variable persists until the end of the program. A variable can be declared static using keyword: static. For example:
static int i;
Here, i is a static variable.
Example to demonstrate the static variable
#include <stdio.h>
void Check();
int main(){
   Check();
   Check();
   Check();
}
void Check(){
    static int c=0;
    printf("%d\t",c);
    c+=5;
}
Output
0      5     10
During first function call, it will display 0. Then, during second function call, variable c will not be initialized to 0 again, as it is static variable. So, 5 is displayed in second function call and 10 in third call.
If variable c had been automatic variable, the output would have been:
0     0     0

HANDLING OF STRINGS

HANDLING OF STRINGS

In C programming, array of character are called strings.

A string is terminated by null character /0. For example:

"My course BCA"
Here, "My course  BCA " is a string. When, compiler encounters strings, it appends null character at the end of string.

Declaration of strings

Strings are declared in C in similar manner as arrays. Only difference is that, strings are of char type.

char s[5];

Declaration of strings in C language

Strings can also be declared using pointer.
char *p

Initialization of strings

In C, string can be initialized in different number of ways.

char c[]="abcd";
     OR,
char c[5]="abcd";
     OR,
char c[]={'a','b','c','d','\0'};
     OR;
char c[5]={'a','b','c','d','\0'};

Initialization of strings in C programming

String can also be initialized using pointers

char *c="abcd";
Reading Strings from user.
Reading words from user.
char c[20];
scanf("%s",c);
String variable c can only take a word. It is because when white space is encountered, the scanf() function terminates.

Write a C program to illustrate how to read string from terminal.

#include <stdio.h>
int main(){
    char name[20];
    printf("Enter name: ");
    scanf("%s",name);
    printf("Your name is %s.",name);
    return 0;
}

Output
Enter name: king mcb
Your name is king

Here, program will ignore mcb because, scanf() function takes only string before the white space.

Reading a line of text

C program to read line of text manually.

#include <stdio.h>
int main(){
    char name[30],ch;
    int i=0;
    printf("Enter name: ");
    while(ch!='\n')    // terminates if user hit enter
    {
        ch=getchar();
        name[i]=ch;
        i++;
    }
    name[i]='\0';       // inserting null character at end
    printf("Name: %s",name);
    return 0;
}

This process to take string is tedious. There are predefined functions gets() and puts in C language to read and display string respectively.

int main(){
    char name[30];
    printf("Enter name: ");
    gets(name);     //Function to read string from user.
    printf("Name: ");
    puts(name);    //Function to display string.
    return 0;
}
Both, the above program has same output below:

Output
Enter name: king  mcb
Name: king mcb

Passing Strings to Functions

String can be passed to function in similar manner as arrays as, string is also an array.

#include <stdio.h>
void Display(char ch[]);
int main(){
    char c[50];
    printf("Enter string: ");
    gets(c);            
    Display(c);     // Passing string c to function.  
    return 0;
}
void Display(char ch[]){
    printf("String Output: ");
    puts(ch);
}

Here, string c is passed from main() function to user-defined function Display().

In function declaration, ch[] is the formal argument.

String handling functions

You can perform different type of string operations manually like: finding length of string, concatenating(joining) two strings etc.

 But, for programmers ease, many library function are defined under header file <string.h> to handle these commonly used talk in C programming.

String Manipulations In C Programming Using Library Functions

Strings are often needed to be manipulated by programmer according to the need of a problem.

All string manipulation can be done manually by the programmer but, this makes programming complex and large.


To solve this, the C supports a large number of string handling functions.

There are numerous functions defined in "string.h" header file. Few commonly used string handling functions are discussed below:


strlen() Calculates the length of string
strcpy() Copies a string to another string
strcat() Concatenates(joins) two strings
strcmp() Compares two string
strlwr() Converts string to lowercase
strupr() Converts string to uppercase

Strings handling functions are defined under "string.h" header file, i.e, you have to include the code below to run string handling functions.

#include <string.h>


gets() and puts()

Functions gets() and puts() are two string functions to take string input from user and display string respectively.

#include<stdio.h>
int main(){
    char name[30];
    printf("Enter name: ");
    gets(name);     //Function to read string from user.
    printf("Name: ");
    puts(name);    //Function to display string.
    return 0;
}
Though, gets() and puts() function handle string, both these functions are defined in "stdio.h" header file.

ARRAYS

ARRAYS

In C programming, one of the frequently arising problem is to handle similar types of data.

For example: If the user want to store marks of 10students.

This can be done by creating 10 variable individually but, this process is rather tedious and impracticable.
 These type of problem can be handled in C programming using arrays.
An array is a sequence of data item of homogeneous value(same type).

Arrays are of two types:

One-dimensional arrays
Multidimensional arrays

One dimensional array

Declaration of one-dimensional array

data_type array_name[array_size];

For example:
int age[5];

Here, the name of array is age.
The size of array is 5,i.e., there are 5 items(elements) of array age. All element in an array are of the same type (int, in this case).

Array elements

Size of array defines the number of elements in an array. Each element of array can be accessed and used by user according to the need of program.
For example:
int age[5];

Elements of arrays in C.

Note that, the first element is numbered 0 and so  on.
Here, the size of array age is 5 times the size of int because there are 5 elements.
Suppose, the starting addres of age[0] is 2120d and the size of int be 4 bytes. Then, the next address (address of a[1]) will be 2124d, address of a[2] will be 2128d and so on.


Initialization of one-dimensional array

Arrays can be initialized at declaration

int age[5]={2,4,34,3,4};

It is not necessary to define the size of arrays during initialization.

int age[]={2,4,34,3,4};

In this case, the compiler determines the size of array by calculating the number of elements of an array.


Initialization of one-dimensional arrays in C programming

Accessing array elements

In C programming, arrays can be accessed and treated like variables in C.

For example

scanf("%d",&age[2]);
/* statement to insert value in the third element of array age[]. */

scanf("%d",&age[i]);
/* Statement to insert value in (i+1)th element of array age[]. */
/* Because, the first element of array is age[0], second is age[1], ith is age[i-1] and (i+1)th is age[i]. */

printf("%d",age[0]);
/* statement to print first element of an array. */

printf("%d",age[i]);
/* statement to print (i+1)th element of an array. */
Example of array in C programming

/* C program to find the sum marks of n students using arrays */

#include <stdio.h>
int main(){
     int marks[10],i,n,sum=0;
     printf("Enter number of students: ");
     scanf("%d",&n);
     for(i=0;i<n;++i){
          printf("Enter marks of student%d: ",i+1);
          scanf("%d",&marks[i]);
          sum+=marks[i];
     }
     printf("Sum= %d",sum);
return 0;
}

Output
Enter number of students: 3
Enter marks of student1: 12
Enter marks of student2: 31
Enter marks of student3: 2
sum=45.


C Programming Multidimensional Arrays

C programming language allows to create arrays of arrays known as multidimensional arrays. For example:
float a[2][6];
Here, a is an array of two dimension, which is an example of multidimensional array. This array has 2 rows and 6 columns .

Initialization of Multidimensional Arrays

In C, multidimensional arrays can be initialized in different number of ways.

int c[2][3]={{1,3,0}, {-1,5,9}};
                 OR
int c[][3]={{1,3,0}, {-1,5,9}};
                 OR
int c[2][3]={1,3,0,-1,5,9};

Initialization Of three-dimensional Array

double cprogram[3][2][4]={
{{-0.1, 0.22, 0.3, 4.3}, {2.3, 4.7, -0.9, 2}},
 {{0.9, 3.6, 4.5, 4}, {1.2, 2.4, 0.22, -1}},
 {{8.2, 3.12, 34.2, 0.1}, {2.1, 3.2, 4.3, -2.0}}
};

Example of Multidimensional Array In C

Write a C program to find sum of two matrix of order 2*2 using multidimensional arrays where, elements of matrix are entered by user.

#include <stdio.h>
int main(){
   float a[2][2], b[2][2], c[2][2];
   int i,j;
   printf("Enter the elements of 1st matrix\n");
/* Reading two dimensional Array with the help of two for loop. If there was an array of 'n' dimension, 'n' numbers of loops are needed for inserting data to array.*/  
   for(i=0;i<2;++i)    
       for(j=0;j<2;++j){
       printf("Enter a%d%d: ",i+1,j+1);
       scanf("%f",&a[i][j]);
       }
   printf("Enter the elements of 2nd matrix\n");
   for(i=0;i<2;++i)
       for(j=0;j<2;++j){
       printf("Enter b%d%d: ",i+1,j+1);
       scanf("%f",&b[i][j]);
       }
   for(i=0;i<2;++i)
       for(j=0;j<2;++j){
/* Writing the elements of multidimensional array using loop. */
       c[i][j]=a[i][j]+b[i][j];  /* Sum of corresponding elements of two arrays. */
       }
   printf("\nSum Of Matrix:");
   for(i=0;i<2;++i)
       for(j=0;j<2;++j){
       printf("%.1f\t",c[i][j]);
           if(j==1)             /* To display matrix sum in order. */
              printf("\n");
      }
return 0;
}

Ouput
Enter the elements of 1st matrix
Enter a11: 2;
Enter a12: 0.5;
Enter a21: -1.1;
Enter a22: 2;
Enter the elements of 2nd matrix
Enter b11: 0.2;
Enter b12: 0;
Enter b21: 0.23;
Enter b22: 23;

Sum Of Matrix:
2.2     0.5
-0.9    25.0


In C programming, a single array element or an entire array can be passed to a function. Also, both one-dimensional and multi-dimensional array can be passed to function as argument.

Passing One-dimensional Array In Function

C program to pass a single element of an array to function

#include <stdio.h>
void display(int a)
   {
   printf("%d",a);
   }
int main(){
   int c[]={2,3,4};
   display(c[2]);  //Passing array element c[2] only.
   return 0;
}
Output
4
Single element of an array can be passed in similar manner as passing variable to a function.
Passing entire one-dimensional array to a function
While passing arrays to the argument, the name of the array is passed as an argument(,i.e, starting address of memory area is passed as argument).
Write a C program to pass an array containing age of person to a function. This function should find average age and display the average age in main function.

#include <stdio.h>
float average(float a[]);
int main(){
     float avg, c[]={23.4, 55, 22.6, 3, 40.5, 18};
     avg=average(c);   /* Only name of array is passed as argument. */
     printf("Average age=%.2f",avg);
     return 0;
   }
float average(float a[]){
     int i;
     float avg, sum=0.0;
     for(i=0;i<6;++i){
       sum+=a[i];
     }
     avg =(sum/6);
     return avg;
}
Output
Average age=27.08

Passing Multi-dimensional Arrays to Function

To pass two-dimensional array to a function as an argument, starting address of memory area reserved is passed as in one dimensional array

Example to pass two-dimensional arrays to function

#include
void Function(int c[2][2]);
int main(){
   int c[2][2],i,j;
   printf("Enter 4 numbers:\n");
   for(i=0;i<2;++i)
      for(j=0;j<2;++j){
           scanf("%d",&c[i][j]);
      }
   Function(c);   /* passing multi-dimensional array to function */
   return 0;
}
void Function(int c[2][2]){
/* Instead to above line, void Function(int c[][2]){ is also valid */
   int i,j;
   printf("Displaying:\n");
   for(i=0;i<2;++i)
      for(j=0;j<2;++j)
          printf("%d\n",c[i][j]);
}
Output
Enter 4 numbers:
2
3
4
5
Displaying:
2
3
4
5

DECISION MAKING BRANCHING AND LOOPING

DECISION  MAKING  BRANCHING  AND LOOPING

Decision making are needed when, the program encounters the situation to choose a particular statement among many statements.

In C, decision making can be performed with following  statements.

if...else statement
switch statement

if statement

syntax

if (test expression){
       statement/s to be executed if test expression is true;
}

If the test expression is true then, statements for the body if, i.e, statements inside parenthesis are executed.
But, if the test expression is false, the execution of the statements for the body of if statements are skipped.


Example of if statement

Write a C program to print the number entered by user only if the number entered is positive .

#include <stdio.h>
      int main(){
      int num;
      printf("Enter a number to check.\n");
      scanf("%d",&num);
      if(num<0)       /* checking whether number is greater than 0 or not. */
            printf("Number=%d\n",num);  
/*If test condition is true, statement above will be executed, otherwise it will not be executed */
return 0;
}

Output
Enter a number to check.
2
Number=2


if...else statement

The if...else statement is used, if the programmer wants to execute some code,
If the expression  is true  or false one statement is going  to be executed.

Syntax

if (test expression)
     statements to be executed if test expression is true;
else
     statements to be executed if test expression is false;


Example

Write a C program to check whether a number entered by user is even or odd
#include <stdio.h>
int main(){
      int num;
      printf("Enter a number you want to check.\n");
      scanf("%d",&num);
      if((num%2)==0)          //checking whether remainder is 0 or not.
           printf("%d is even.",num);
      else
           printf("%d is odd.",num);
      return 0;
}

Output 1
Enter a number you want to check.
25
25 is odd.

Output 2
Enter a number you want to check.
2
2 is even.

Nested if...else statement (if...elseif....else Statement)

The if...else statement can be used in nested form when a serious decision are involved.

Syntax

if (test expression)
     statements to be executed if test expression is true;
else
     if(test expression 1)
          statements to be executed if test expressions 1 is true;
       else
          if (test expression 2)
           .
           .
           .
            else
              statements to be executed if all test expressions are false;

How nested if...else works?
If the test expression is true, it will execute the code before else part but, if it is false, the control of the program jumps to the else part and check test expression 1 and the process continues. If all the test expression are false then, the last statement is executed.
The ANSI standard specifies that 15 levels of nesting may be continued.

Example

Write a C program to relate two integers entered by user using = or > or < sign.

#include <stdio.h>
int main(){
     int number1, number2;
     printf("Enter two integers to check".\n);
     scanf("%d %d",&number1,&number2);
     if(number1==number2) //checking whether two integers are equal.
          printf("Result: %d=%d",number1,number2);
     else
        if(number1>number2) //checking whether number 1is greater than number 2.
          printf("Result: %d>%d",number1,number2);
        else
          printf("Result: %d>%d",number 2,number1);
return 0;
}

Output 1
Enter two integers to check.
5
3
Result: 5>3

Output 2
Enter two integers to check.
-4
-4
Result: -4=-4


Loops in C

Loops causes program to execute the certain block of code repeatedly until some conditions are satisfied,
 i.e.,loops are used in performing repetitive work in programming.

Suppose you want to execute some code/s 1000 times. You can perform it by writing that code/s only one time and repeat the execution 1000 times using loop.

There are 3 types of loops in C

for loop
while loop
do...while loop

for Loop

Syntax

for(initial expression; test expression; increment/decrement expression)
{
       code/s to be executed;
}

Working  of loops in c

The initial expression is initialized only once at the beginning of the for loop.

Then, the test expression is checked by the program. If the test expression is false, for loop is terminated. But, if test expression is true then, the codes are executed and update expression is updated. Again, the test expression is checked. If it is false, loop is terminated and if it is true, the same process repeats until test expression is false.

example

Write a program to find the sum of first n natural numbers .

#include <stdio.h>
int main(){
    int n, count, sum=0;
    printf("Enter the value of n.\n");
    scanf("%d",&n);
    for(count=1;count<=n;++count)  //for loop terminates if count>n
    {
        sum+=count;    /* this statement is equivalent to sum=sum+count */
    }
    printf("Sum=%d",sum);
    return 0;
}

Output
Enter the value of n.
19
Sum=190

In this program, the user is asked to enter the value of n. Suppose you entered 19 then,  count is inatialized to 1 at first. Then, the
 test expression in the for loop,i.e.,  (count<= n) becomes true. So, the code in the body of for loop is executed which makes sum to 1. Then, the expression ++count is executed and again the test expression is checked, which becomes true. Again, the body of for loop is executed which makes sum to 3 and this process continues. When count is 20, the test condition becomes false and the for loop is terminated.

while and do...while Loop


while loop


Syntax of while loop

while (test expression)
{
     statements to be executed.
}

In the beginning of while loop, test expression is checked. If it is true, codes inside the body of while loop,i.e, code/s inside parentheses are executed and again the test expression is checked and process continues until the test expression becomes false.

Example
Write a C program to find the factorial of a number.

#include <stdio.h>
     int main(){
     int number,factorial;
     printf("Enter a number.\n");
     scanf("%d",&number);
     factorial=1;
     while (number>0){      /* while loop continues util test condition number>0 is true */
           factorial=factorial*number;
           --number;
}
printf("Factorial=%d",factorial);
return 0;
}

Output
Enter a number.
5
Factorial=120


do...while loop

In C, do...while loop is very similar to while loop. Only difference between these two loops is that, in while loops, test expression is checked at first but, in do...while loop code is executed at first then the condition is checked. So, the code are executed at least once in do...while loops.

Syntax

do {
   some code/s;
}
while (test expression);

At first codes inside body of do is executed. Then, the test expression is checked. If it is true, code/s inside body of do are executed again and the process continues until test expression becomes false(zero).

Notice, there is semicolon in the end of while (); in do...while loop.


Example

Write a C program to add all the numbers entered by a user until user enters 10.

/*C program to demonstrate the working of do...while statement*/
#include <stdio.h>
int main(){
   int sum=0,num;
   do             /* Codes inside the body of do...while loops are at least executed once. */
   {                                  
        printf("Enter a number\n");
        scanf("%d",&num);
        sum+=num;    
   }
   while(num!=10);
   printf("sum=%d",sum);
return 0;
}

Output
Enter a number
3
Enter a number
-2
Enter a number
10
sum=1

BREAK  AND  CONTINUE

 To interrupt the normal flow of control of a program. Loops performs a set of operation repeately until certain condition becomes false but, it is sometimes desirable to skip some statements inside loop and terminate the loop immediately without checking the test expression. In such cases, break and continue statements are used.

break Statement

In C programming, break is used in terminating the loop immediately after it is encountered.

 The break statement is used with conditional if statement

Syntax

break;

The break statement can be used in terminating all three loops for, while and do...while loops.

Example

Write a C program to find average of maximum of n positive numbers entered by user. But, if the input is negative, display the average(excluding the average of negative input) and end the program.

/* C program to demonstrate the working of break statement by terminating a loop, if user inputs negative number*/

# include <stdio.h>
int main(){
   float num,average,sum;
   int i,n;
   printf("Maximum no. of inputs\n");
   scanf("%d",&n);
   for(i=1;i<=n;++i){
       printf("Enter n%d: ",i);
       scanf("%f",&num);
       if(num<0.0)
       break;                     //for loop breaks if num<0.0
       sum=sum+num;
}
  average=sum/(i-1);      
  printf("Average=%.2f",average);
  return 0;
}
Output
Maximum no. of inputs
4
Enter n1: 1.5
Enter n2: 12.5
Enter n3: 7.2
Enter n4: -1
Average=7.07

In this program, when the user inputs number less than zero, the loop is terminated using break statement with executing the statement below it i.e., without executing sum=sum+num.


continue Statement

It is sometimes desirable to skip some statements inside the loop. In such cases, continue statements are used.

Syntax

continue;
Just like break, continue is also used with conditional if statement.

Example of continue statement
Write a C program to find the product of 4 integers entered by a user. If user enters 0 skip it.

//program to demonstrate the working of continue statement in C programming
# include <stdio.h>
int main(){
    int i,num,product;
    for(i=1,product=1;i<=4;++i){
        printf("Enter num%d:",i);
        scanf("%d",&num);
        if(num==0)
            continue;  / *In this program, when num equals to zero, it skips the statement product*=num and continue the loop. */
        product*=num;
}
    printf("product=%d",product);
return 0;
}

Output
Enter num1:3
Enter num2:0
Enter num3:-5
Enter num4:2
product=-30

Switch case statement


Decision making are needed when, the program encounters the situation to choose a particular statement among many statements.
If a programmar has to choose one among many alternatives if...else can be used but, this makes programming logic complex. This type of problem can be handled in C programming using switch...case statement.

Syntax

switch (eeexpression)
{
case constant1:
   codes to be executed if expression equals to constant1;
   break;
case constant2:
   codes to be executed if expression equals to constant3;
   break;
   .
   .
   .
default:
   codes to be executed if expression doesn't match to any cases;
}

In switch...case, expression is either an integer or a character. If the value of switch expression matches any of the constant in case, the relevant codes are executed and control moves out of the switch...case statement. If the expression doesn't matches any of the constant in case, then the default statement is executed.

Example

Write a program that asks user n arithmetic operator('+','-','*' or '/') and two operands and perform the corresponding calculation on the operands.

/* C program to demonstrate the working of switch...case statement */
/* Program to create a simple calculator for addition, subtraction, multiplication and division */
# include <stdio.h>
int main(){
     char operator;
     float num1,num2;
     printf("Enter operator +, - , * or / :\n");
     operator=getche();
     printf("\nEnter two operands:\n");
     scanf("%f%f",&num1,&num2);
     switch(operator)                            
     {
     case '+':
              printf("num1+num2=%.2f",num1+num2);
              break;
     case '-':
              printf("num1-num2=%.2f",num1-num2);
              break;
     case '*':
              printf("num1*num2=%.2f",num1*num2);
              break;
     case '/':
              printf("num2/num1=%.2f",num1/num2);
              break;
     default:                                
/* if operator is other than +, -, * or /, error message is shown */
              printf(Error! operator is not correct");
              break;
     }
     return 0;
}

Output
Enter operator +, -, * or / :
/
Enter two operators:
34
3
num2/num1=11.33

Notice break statement at the end of each case, which cause switch...case statement to exit. If break statement are not used, all statements below that case statement are also executed.

goto Statement

In C programming, goto statement is used for altering the normal sequence of program execution by transferring control to some other part of the program.

Syntax

goto label;
.............
.............
.............
label:
statement;
In this syntax, label is an identifier. When, the control of program reaches to goto statement, the control of the program will jump to the label: and executes the code/s after it.


Example of goto statement

/* C program to demonstrate the working of goto statement.*/
# include <stdio.h>
int main(){
   float num,average,sum;
   int i,n;
   printf("Maximum no. of inputs: ");
   scanf("%d",&n);
   for(i=1;i<=n;++i){
       printf("Enter n%d: ",i);
       scanf("%f",&num);
       if(num<0.0)
       goto jump;             /* control of the program jumps to label jump */
       sum=sum+num;
}
jump:
  average=sum/(i-1);      
  printf("Average: %.2f",average);
  return 0;
}
Output
Maximum no. of inputs: 4
Enter n1: 1.5
Enter n2: 12.5
Enter n3: 7.2
Enter n4: -1
Average: 7.07
Though goto statement is included in ANSI standard of C, use of goto statement should be reduced as much as possible in a program.

Reasons to avoid goto statement
Though, using goto statement give power to jump to any part of program, using goto statement makes the logic of the program complex and tangled. In modern programming, goto statement is considered a harmful construct and a bad programming practice.
The goto statement can be replaced in most of C program with the use of break and continue statements. In fact, any program in C programming can be perfectly written without the use of goto statement. All programmer should try to avoid goto statement as possible as they can

INPUT AND OUTPUT OPERATIONS

INPUT AND OUTPUT OPERATIONS

ANSI standard has defined many library functions for input and output in C language.

 printf() and scanf() are the most commonly used to display output and take input respectively.

Let us consider an example:

#include <stdio.h>      //This is needed to run printf() function.
int main()
{
    printf("My course  BCA");  //displays the content inside quotation
    return 0;
}

Output
My course BCA

In the above program


printf() is a library function to display output which only works if #include<stdio.h>is included at the beginning.

Here, stdio.h is a standard input output header file .

 #include is command to paste the code from the header file whenever necessary.

When compiler encounters printf() function and doesn't find stdio.h header file, compiler shows error.

I/O of integers in C

#include<stdio.h>
int main()
{
    int c=5;
    printf()("Number=%d",c);
    return 0;
}
Output
Number=5

Inside quotation of printf() there, is a conversion format string "%d" (for integer). If this conversion format string matches with remaining argument,i.e, c in this case, value of c is displayed.

#include<stdio.h>
int main()
{
    int c;
    printf()("Enter a number\n");
    scanf()("%d",&c);
    printf()("Number=%d",c);
    return 0;
}
Output
Enter a number
4
Number=4

The scanf() function is used to take input from user.

In this program, the user is asked a input and value is stored in variable c.

Note the '&' sign before c. &c denotes the address of c and value is stored in that address.

Programming  In c is easy you should store your values in variables, then later perform  various  operations  on them and finally display the values from  the  variables.

Try various programs by changing data  types  and format specifiers.

OPERATORS AND EXPRESSIONS


OPERATORS AND EXPRESSIONS

Operators are the symbol which operates on value or a variable.

For example: + is a operator to perform addition.

C programming language has wide range of operators to perform various operations.

For better understanding of operators, these operators can be classified as:


Arithmetic Operators
Increment and Decrement Operators
Assignment Operators
Relational Operators
Logical Operators
Conditional Operators
Bitwise Operators
Special Operators

Arithmetic Operators


+ addition or unary plus
- subtraction or  unary minus
* multiplication
/ division
% remainder after division( modulo division)



/* Program to demonstrate the working of arithmetic operators in C.  */

#include <stdio.h>
int main(){
    int a=6,b=2,c;
    c=a+b;
    printf("a+b=%d\n",c);
    c=a-b;
    printf("a-b=%d\n",c);
    c=a*b;
    printf("a*b=%d\n",c);
    c=a/b;
    printf("a/b=%d\n",c);
    c=a%b;
    printf("Remainder when a divided by b=%d\n",c);
    return 0;
}
}
Output
a+b=8
a-b=4
a*b=24
a/b=3

Increment and decrement operators

In C, ++ and -- are called increment and decrement operators respectively.

Both of these operators are unary operators, i.e, used on single operand. ++ adds 1 to operand and -- subtracts 1 to operand respectively. For example:

Let a=5 and b=10
a++;  //a becomes 6
a--;  //a becomes 5
++a;  //a becomes 6
--a;  //a becomes 5

Difference between ++ and -- operator as postfix and prefix

When i++ is used as prefix(like: ++var), ++var will increment the value of var and then return it but, if ++ is used as postfix(like: var++), operator will return the value of operand first and then only increment it. This can be demonstrated by an example:

#include <stdio.h>
int main(){
    int c=2,d=2;
    printf("%d\n",c++); //this statement displays 2 then, only c incremented by 1 to 3.
    printf("%d",++c);   //this statement increments 1 to c then, only c is displayed.
    return 0;
}

Output
2
4

Assignment Operators

The most common assignment operator is =.

This operator assigns the value in right side to the left side.

 For example:
var=5  //5 is assigned to var
a=c;   //value of c is assigned to a
5=c;   // Error! 5 is a constant.
Operator Example Same As
= a=b a=b
+= a+=b a=a+b
-= a-=b a=a-b
*= a*=b a=a*b
/= a/=b a=a/b
%= a%=b a=a%b

Relational Operator

Relational operators checks relationship between two operands.

If the relation is true, it returns value 1 and if the relation is false, it returns value 0.

For example:

a>b
Here, > is a relational operator. If a is greater than b, a>b returns 1 if not then, it returns 0.

Relational operators are used in decision making and loops in C programming.



== Equal to 7==3 returns false (0)
> Greater than 7>3 returns true (1)
< Less than 7<3 returns false (0)
!= Not equal to 7!=3 returns true(1)
>= Greater than or equal to 7>=3 returns true (1)
<= Less than or equal to 7<=3 return false (0)

Logical Operators

Logical operators are used to combine expressions containing relation operators.

In C, there are 3 logical operators:


&& Logial AND If c=5 and d=2 then,((c==5) && (d>5)) returns false.
|| Logical OR If c=5 and d=2 then, ((c==5) || (d>5)) returns true.
! Logical NOT If c=5 then, !(c==5) returns false..

Bitwise Operators

A bitwise operator works on each bit of data.

Bitwise operators are used in bit level programming.


& Bitwise AND
| Bitwise OR
^ Bitwise exclusive OR
~ Bitwise complement
<< Shift left
>> Shift right



Comma Operator

Comma operators are used to link related expressions together. For example:
int a,c=5,d;

The sizeof operator
It is a unary operator which is used in finding the size of data type, constant, arrays, structure etc. For example:

#include <stdio.h>
int main(){
    int a;
    float b;
    double c;
    char d;
    printf("Size of int=%d bytes\n",sizeof(a));
    printf("Size of float=%d bytes\n",sizeof(b));
    printf("Size of double=%d bytes\n",sizeof(c));
    printf("Size of char=%d byte\n",sizeof(d));
    return 0;
}
Output
Size of int=4 bytes
Size of float=4 bytes
Size of double=8 bytes
Size of char=1 byte

Conditional operators (?:)

Conditional operators are used in decision making in C programming, i.e, executes different statements according to test condition whether it is either true or false.

Syntax of conditional operators
conditional_expression?expression1:expression2

If the test condition is true, expression1 is returned and if false expression2 is returned.

Example of conditional operator
#include <stdio.h>
int main(){
   char feb;
   int days;
   printf("Enter l if the year is leap year otherwise enter 0: ");
   scanf("%c",&feb);
   days=(feb=='l')?29:28;
   /*If test condition (feb=='l') is true, days will be equal to 29. */
   /*If test condition (feb=='l') is false, days will be equal to 28. */
   printf("Number of days in February = %d",days);
   return 0;
}
Output
Enter l if the year is leap year otherwise enter n: l
Number of days in February = 29

Friday, September 20, 2013

C TOKEN , VARIABLES AND DATA TYPES

C TOKEN  , VARIABLES   AND   DATA  TYPES

C-TOKENS

Tokens are smallest individual units in C  program.

There are 6 types of tokens

Keyword

String

Identifier

Operator

Constant

Special symbol


KEYWORDS

They are reserved words used in  programming ,each keywords  has  a pre-defined meaning and that cannot be changed .

Example  int , char ,float  ,double  etc


STRINGS

The  array  of  character  are called  strings, A string  is  terminated with a null  character .

Example   "My course BCA "

Declaration of  strings
Char  s[5];
Strings are declared similar to arrays, the  difference is  string  of  char data  type.


IDENTIFIERS

Identifiers are  names  given to C entities  ,such as variables ,function,structures  etc.

Example
                                  Int   car;

      Here,  car is  a  identifier which is a variable of  type  integer  .

Rules for  identifers

1. Identifiers should  be composed  of  letters  ,digits  and  underscore.

2. The first letter of  identifier  should  be  either a letter or underscore.

3. There is  no rule  for  length  of   the  identifer.

OPERATOR

They  are  symbols which  operate on  value or variables.

Example :  '+'  operator  is  used for  addition.

Different operator  in  c

Arithmetic operator.

Increment and decrement operator.

Assignment operator.

Relational operator.

Conditional operator.

Bitwise operator.

Special character.

CONSTANTS

The constants refer to fixed values that the program may not alter during its execution. These fixed values are also called literals.

Constants can be of any of the basic data types like an integer constant, a floating constant, a character constant, or a string literal. There are also enumeration constants as well.

The constants are treated just like regular variables except that their values cannot be modified after their definition.

Integer literals
An integer literal can be a decimal, octal, or hexadecimal constant. A prefix specifies the base or radix: 0x or 0X for hexadecimal, 0 for octal, and nothing for decimal.

214       /* Legal */
0xFeeL      /* Legal */
078         /* Illegal: 8 is not an octal digit */

Floating-point literals
A floating-point literal has an integer part, a decimal point, a fractional part, and an exponent part. You can represent floating point literals either in decimal form or exponential form.

3.14159       /* Legal */
314159E-5L    /* Legal */
510E          /* Illegal: incomplete exponent */

Character constants

Character literals are enclosed in single quotes, e.g., 'x' and can be stored in a simple variable of char type.

A character literal can be a plain character (e.g., 'y'), an escape sequence (e.g., '\t'), or a universal character (e.g., '\u02C0').

String literals
String literals or constants are enclosed in double quotes "". A string contains characters that are similar to character literals: plain characters, escape sequences, and universal characters.

You can break a long line into multiple lines using string literals and separating them using whitespaces.

Examples
"hello, dear"

Defining Constants
There are two simple ways in C to define constants:

Using #define preprocessor.

Using const keyword.

The #define Preprocessor
Following is the form to use #define preprocessor to define a constant:

#define identifier value

The const Keyword

You can use const prefix to declare constants with a specific type as follows:

const type variable = value;

Special  values

The special  values  used in c are ( ) " ; # % / { } [ ]


VARIABLES

Variables are memory location in computer memory to store data, to  indicate  the memory location ,each variable should  be

Given a unique name called identifier.

Variable  names  are just  symbolic  representation of  memory location.

Example :  car ,  Door_No etc.

Rules for writing variables are same as of  identifiers.

Declaration of  variables

Int num;

Here num is variable of  data type int , similarly you can use char , float double for  declaring different variables.

Initialization of variables

Num=10;

Assigning values to the variables is known as initialization.


DATA TYPES

In the C programming language, data types refer to an extensive system used for declaring variables or functions of different types. The type of a variable determines how much space it occupies in storage and how the bit pattern stored is interpreted.

The data types in C can be classified as follows:


1 Basic Types

They are arithmetic types and consists of the two types:
 (a) integer types and
(b) floating-point types.

2 Enumerated types

They are again arithmetic types and they are used to define variables that can only be assigned certain discrete integer values throughout the program.

3 The type void:
The type specifier void indicates that no value is available.

4 Derived types:
They include
(a) Pointer types,
(b) Array types,
 (c) Structure types,
 (d) Union types and
(e) Function types.




INTEGER  DATA TYPES


FLOATING DATA TYPE

BASIC STRUCTURE OF C PROGRAM

BASIC  STRUCTURE OF C PROGRAM

DOCUMENTATION SECTION

The documentation section  consist  of comments lines  giving  the name  of the program ,details  etc

PREPROCESSOR STATEMENTS

The  preprocessor  statements  begin with  #Symbol , which are  also  called pre processor directives.

These statements instruct the compiler to include preprocessor such as header files and symbolic constants before

Compiling the c program.

Ex .

#Include<Stdio.h>
#include<Conio.h>
#include<Math.h>
#Define P I 3.1412

GLOBAL DECLARATIONS

This variables are declared before the main() part of the function ,user defined functions  are also called global variables ,

Global variables can be accessed by all the user defined function including main() function .


main() FUNCTION

Every C program should contain only one main().

Execution of  C program starts with the main().

C is case sensitive and main() is written in lower case ,if you write in caps you will face the error.

The main() part of the program executes user defined functions,library function and user defined functions should be enclosed

With the left and right braces.

BRACES

Every C program should have  a pair of curly braces {  }

The left brace  ( { ) indicate the beginning of  the main() function .

Right brace ( } ) indicate the beginning of   the main() function.

LOCAL DECLARATIONS

The variable declaration is  part of C program ,all the variables declared are used in main() function are local variables .

We can also declare arrays,pointer ,function etc and the variable are initialised  with  the  basic data types .

main()
{
Int sum();

Int x;

Float Y;
}

PROGRAM STATEMENTS

These statements are building blocks of  C programs.

These statements  instructs to  perform specific task .

Statement are of different types like input  statement ,output statement,  control statements, assignment statement.

It also include comments  , comments are not executed  they are used just to understand   the program.


USER DEFINED FUNCTIONS

These  are sub programs,and  sub programs are  genrally defined as  user defined functions.

This functions  perform specific task  and also contains set  of  program statements.